<?php
declare(strict_types=1);

namespace app\model;

use think\Model;

class MessageSetting extends Model
{
    // 设置表名
    protected $name = 'message_setting';
    
    // 自动时间戳
    protected $autoWriteTimestamp = true;
    
    // 设置字段信息
    protected $schema = [
        'id' => 'int',
        'type' => 'int',
        'scene' => 'int',
        'create_time' => 'datetime',
        'update_time' => 'datetime'
    ];

    // 类型转换
    protected $type = [
        'id' => 'integer',
        'type' => 'integer',
        'scene' => 'integer'
    ];

    /**
     * 获取消息类型文本
     * type 表示消息的业务类型，主要针对订单状态的不同阶段
     */
    public function getTypeTextAttr()
    {
        $types = [
            1 => '订单通知',        // 新订单创建时的通知
            2 => '订单取消通知',    // 订单被取消时的通知
            3 => '订单揽收通知',    // 快递员揽收包裹时的通知
            4 => '订单签收通知',    // 包裹被签收时的通知
            5 => '订单退款通知',    // 订单发生退款时的通知
            6 => '订单退货通知'     // 订单发起退货时的通知
        ];
        return $types[(int)$this->type] ?? '未知';
    }

    /**
     * 获取场景类型文本
     * scene 表示触发消息的具体场景，主要针对用户的具体操作
     */
    public function getSceneTextAttr()
    {
        $scenes = [
            1 => '用户下单',        // 用户创建新订单时
            2 => '用户取消订单',    // 用户主动取消订单时
            3 => '用户支付',        // 用户发起支付时
            4 => '用户取消支付',    // 用户取消支付时
            5 => '用户支付成功',    // 用户完成支付时
            6 => '用户支付失败'     // 用户支付失败时
        ];
        return $scenes[(int)$this->scene] ?? '未知';
    }

    /**
     * 关联消息模板
     */
    public function templates()
    {
        return $this->hasMany(MessageTemplateConfig::class, 'message_setting_id', 'id');
    }
} 